# [Spring Boot] Test Code
# ν μ€νΈ μ½λλ₯Ό μμ±ν΄μΌ νλ μ΄μ
- κ°λ°λ¨κ³ μ΄κΈ°μ λ¬Έμ λ₯Ό λ°κ²¬ν μ μμ
- λμ€μ μ½λλ₯Ό 리ν©ν λ§νκ±°λ λΌμ΄λΈλ¬λ¦¬ μ κ·Έλ μ΄λ μ κΈ°μ‘΄ κΈ°λ₯μ΄ μ μλνλ μ§ νμΈ κ°λ₯ν¨
- κΈ°λ₯μ λν λΆνμ€μ± κ°μ
κ°λ° μ½λ μ΄μΈμ ν μ€νΈ μ½λλ₯Ό μμ±νλ μΌμ κ°λ° μκ°μ΄ λμ΄λ κ²μ΄λΌκ³ μκ°ν μ μλ€. νμ§λ§ λ΄ μ½λμ μ€λ₯κ° μλ μ§ κ²μ¦ν λ, ν μ€νΈ μ½λλ₯Ό μμ±νμ§ μκ³ μ§ννλ€λ©΄ λ μκ° μλͺ¨κ° ν΄ κ²μ΄λ€.
1. μ½λλ₯Ό μμ±ν λ€ νλ‘κ·Έλ¨μ μ€ννμ¬ μλ²λ₯Ό ν¨λ€.
2. API νλ‘κ·Έλ¨(ex. Postman)μΌλ‘ HTTP μμ² ν κ²°κ³Όλ₯Ό Printλ‘ μ°μ΄μ νμΈνλ€.
3. κ²°κ³Όκ° μμκ³Ό λ€λ₯΄λ©΄, λ€μ νλ‘κ·Έλ¨μ μ’
λ£ν λ€ μ½λλ₯Ό μμ νκ³ λ°λ³΅νλ€.
μμ κ°μ λ°©μμ΄ μΌλ§λ λ°λ³΅λ μ§ λͺ¨λ₯Έλ€. κ·Έλ¦¬κ³ νλμ κΈ°λ₯λ§λ€ μ λ κ² ν μ€νΈλ₯Ό νλ©΄ μλ²λ₯Ό ν€κ³ λλ μμ λν λ무 λΉν¨μ¨μ μ΄λ€.
μ΄ λ°μλ Printλ‘ λμΌλ‘ κ²μ¦νλ κ²λ μ΄λμ λ μ μμ νκ³κ° μλ€. ν μ€νΈ μ½λλ μλμΌλ‘ κ²μ¦μ ν΄μ£ΌκΈ° λλ¬Έμ μ±κ³΅νλ€λ©΄ μλμΌλ‘ κ²μ¦ν νμ μμ²΄κ° μμ΄μ§λ€.
μλ‘μ΄ κΈ°λ₯μ΄ μΆκ°λμμ λλ ν μ€νΈ μ½λλ₯Ό ν΅ν΄ λ§μ½ κΈ°μ‘΄μ μ½λμ μν₯μ΄ κ°λ€λ©΄ μ΄λ€ λΆλΆμ μμ ν΄μΌ νλ μ§ μ μ μλ μ₯μ λ μ‘΄μ¬νλ€.
λ°λΌμ ν μ€νΈ μ½λλ κ°λ°νλ λ° μμ΄μ νμμ μΈ λΆλΆμ΄λ©° λ°λμ νμ©ν΄μΌ νλ€.
# ν μ€νΈ μ½λ μμ
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = HomeController.class)
public class HomeControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void home_return() throws Exception {
//when
String home = "home";
//then
mvc.perform(get("/home"))
.andExpect(status().isOk())
.andExpect(content().string(home));
}
}
@RunWith(SpringRunner.class)
ν μ€νΈλ₯Ό μ§νν λ JUnitμ λ΄μ₯λ μ€νμ μΈμ λ€λ₯Έ μ€νμλ₯Ό μ€νμν¨λ€.
μ€νλ§ λΆνΈ ν μ€νΈμ JUnit μ¬μ΄μ μ°κ²°μ μν μ νλ€κ³ μκ°νλ©΄ λλ€.
@WebMvcTest
컨νΈλ‘€λ¬λ§ μ¬μ©ν λ μ μΈμ΄ κ°λ₯νλ©°, Spring MVCμ μ§μ€ν μ μλ μ΄λ Έν μ΄μ μ΄λ€.
@Autowired
μ€νλ§μ΄ κ΄λ¦¬νλ Beanμ μ£Όμ μμΌμ€λ€.
MockMvc
μΉ APIλ₯Ό ν μ€νΈν λ μ¬μ©νλ©°, μ΄λ₯Ό ν΅ν΄ HTTP GET, POST, DELETE λ±μ λν API ν μ€νΈκ° κ°λ₯νλ€.
mvc.perform(get("/home"))
/home
μ£Όμλ‘ HTTP GET μμ²μ ν μν©μ΄λ€.
.andExpect(status().isOk())
κ²°κ³Όλ₯Ό κ²μ¦νλ andExpect
λ‘, μ¬λ¬κ°λ₯Ό λΆμ¬μ μ¬μ©μ΄ κ°λ₯νλ€. status()
λ HTTP Headerλ₯Ό κ²μ¦νλ κ²μΌλ‘ κ²°κ³Όμ λν HTTP Status μνλ₯Ό νμΈν μ μλ€. νμ¬ isOK()
λ 200 μ½λκ° λ§λμ§ νμΈνκ³ μλ€.
νλ‘μ νΈλ₯Ό λ§λ€λ©΄μ λ€μν κΈ°λ₯λ€μ ꡬννκ² λλλ°, μ΄μ²λΌ ν μ€νΈ μ½λλ‘ κ²¬κ³ ν νλ‘μ νΈλ₯Ό λ§λ€κΈ° μν κΈ°λ₯λ³ λ¨μ ν μ€νΈλ₯Ό μ§ννλ μ΅κ΄μ κΈΈλ¬μΌ νλ€.